CD-Check remove Tutor 06



  • Programm: Theme Park World ver. 1.1
  • Protection: CD-Check / C-Dilla
  • Ziel: Ohne CD spielen

  • Autor: |VerTex|
  • Datum: 14.01.2000
  • Email: VerTex.TGC@gmx.net


  • Inhalt

  • 1. Einleitung
  • 2. Tools
  • 3. Tutor
  • 4. Sonstiges



  • Einleitung

    Hehe!
    2 Tutors an einem Tag, dass nenn ich eine hammer Leistung! Zumal habe ich die Spiele auch erst heute gecrackt, somit eine noch bessere Leistung, oder? Und wie in meinem ersten Tutor mach ich es schon wieder nicht mit einem GetDriveTypeA call oder ähnlichem. Na gespannt?



    Tools

  • 1. Wir brauchen eine Installation von "Theme Park World" und dann noch darüber das Update ver. 1.1
  • 2. Win32DASM
  • 3. Black Check's Bruteforce Cdilla Decrypter
  • 4. Einen Hex Editor




  • Tutor

    Einige Zeilen könnten euch von meinem anderem Tutor bekannt sein, denn ich weiss gar nicht was ich so alles schreiben soll. Irgendwie fängt das alles gleich an.
  • 1. Nach dem wir "Theme Park World" installiert haben und das Update darüber, starten wir "CDBRUTE.EXE" (Black Checks...). Wir wählen die Datei "tp.icd", die sich in eurem "Theme Park World" Verzeichnis befindet. Nun dürfte die Meldung kommen: "This game is protected Safedisc R2 or above...". Wenn wir jetzt "OK" clicken dürfte das Programm eine BlackChecks.exe erstellt haben (geht ziemlich schnell).

  • 2. Ok, jetzt haben wir die Entschlüsselte "Theme Park World Update" Startdatei in unserem Verzeichnis namens "Blackcheck.exe", die ca. 3,6MB groß sein dürfte. Wenn wir jetzt versuchen diese Datei auszuführen, natürlich ohne CD im Laufwerk, dann kommt eine Fehlermeldung: "Fehler: Kann die Theme Park World CD...".
    Zeit für Win32DASM!! Startet Win32DASM und disassembled die "BlackCheck.exe" (dauert ein wenig, aber lohnt sich)... Wir starten das Spiel vom Disassembler aus in dem wir "STRG+L" drücken und nach dem laden der DLL's auf "Run" clicken. Upps, Schon wieder diese Fehlermeldung. Wir clickt jetzt auf den Button (im "Win32Dasm Loader") "F7 / Step Into". Damit erreichen wir das der Code an die Stelle geht, von wo die aktuelle Aktion gerufen worden ist. So, jetzt beenden wir das Programm mit "Terminate" und ihr seid wieder im ASM Text. Nur noch Das Fenster maximieren und ihr dürftet folgende Zeilen sehen:

    :005A6A50 50                      push eax
    :005A6A51 FFD5                    call ebp
    :005A6A53 83E802                  sub eax, 00000002
    :005A6A56 7453                    je 005A6AAB
    :005A6A58 EBB1                    jmp 005A6A0B
    
    * Referenced by a (U)nconditional or (C)onditional Jump at Address:
    |:005A6A3D(C)
    
    Leider können wir damit nichts anfangen. Deshalb gehen wir ein wenig höher und wir sehen folgendes:

    ...
    ...
    * Reference To: USER32.MessageBoxW, Ord:700Ch      <- Die MessageBox: Wenn keine CD vorhanden ist!
                                      |
    :005A69FF 8B2D70936F00            mov ebp, dword ptr [006F9370]
    :005A6A05 83C408                  add esp, 00000008
    :005A6A08 8D7E10                  lea edi, dword ptr [esi+10]
    ...
    ...
    
    So was nun? Klar, wir gehen den Code immer weiter nach oben, damit wir die Stelle finden von wo die ganze Sch**sse aufgerufen wird. In der Regel müsste es eine Prozedur oder ähnliches sein die mit einem Call gerufen wird. Also kein Unconditional oder Conditional Jump.

    ...
    ...
    :005A698E 90                      nop     <- Hier ein Leeraum was bedeuten kann, das eine ganz
    :005A698F 90                      nop     <- neue Prozedur anfängt.
    
    * Referenced by a CALL at Address:        <- Und hier haben wir schon den Call
    |:0045E42F                                <- Von dieser Adresse wird die Prozedur gerufen
    |
    :005A6990 6AFF                    push FFFFFFFF
    :005A6992 68B0B96D00              push 006DB9B0
    :005A6997 64A100000000            mov eax, dword ptr fs:[00000000]
    :005A699D 50                      push eax
    :005A699E 64892500000000          mov dword ptr fs:[00000000], esp
    :005A69A5 83EC34                  sub esp, 00000034
    :005A69A8 55                      push ebp
    :005A69A9 56                      push esi
    :005A69AA 8BF1                    mov esi, ecx
    :005A69AC 57                      push edi
    ...
    ...
    
    Jetzt wissen wir von wo die Prozedur gerufen wird, aber was nun? Ich habe auch erstmal überlegen müssen, denn ich habe es erst mit einem "return" in der ersten Zeile nach dem Call probiert, aber da ist dann das Spiel abgestürzt. Danach habe ich es probiert den Call zu "noppen", dass ist leider auch fehlgeschlagen! Also musste ich mir mal den Code rund um den Call anschauen:

    ...
    ...
    :0045E41D F3                      repz
    :0045E41E A5                      movsd
    :0045E41F 88442440                mov byte ptr [esp+40], al
    :0045E423 8D4C240C                lea ecx, dword ptr [esp+0C]
    :0045E427 C744244C01000000        mov [esp+4C], 00000001
    :0045E42F E85C851400              call 005A6990                    <- Das hier ist der Call!!
    :0045E434 8B742410                mov esi, dword ptr [esp+10] 
    :0045E438 83F801                  cmp eax, 00000001                <- Wenn eax = 1???
    :0045E43B C744244CFFFFFFFF        mov [esp+4C], FFFFFFFF
    :0045E443 C744240C40A66F00        mov [esp+0C], 006FA640
    :0045E44B 895C2414                mov dword ptr [esp+14], ebx
    :0045E44F 895C2410                mov dword ptr [esp+10], ebx
    :0045E453 7535                    jne 0045E48A
    :0045E455 3BF3                    cmp esi, ebx
    :0045E457 741D                    je 0045E476
    ...
    ...
    
    Ok, schön und gut. Da steht jetzt ein call aber was währe der richtige Rückgabewert?? 2 Zeilen unten drunter habe ich dann etwas entdeckt. Ein "cmp eax, 00000001", was so viel bedeutet wie: "Wenn eax = 1 ist, dann...". Also habe ich mir gedacht, ausprobieren was passiert, wenn der eax = 1 ist. Da habe ich den Call durch ein "mov eax, 00000001" (schreibt in eax den Wert 1) ersetzt und habe das Spiel gestartet. BANG!! "Bin ich schon drin", jap, "Ich bin drin?!", wie unser Boris so schön sagt.

  • 3. So schnell ging das! Jetzt brauchen wir nur noch einen Hex Editor um die Datei endgültig umzuschreiben. Aber erst die hex Adresse rausbekommen. Ganz einfach: wenn ihr im ASM Code seit, doppelclick auf den call und er wird grün. Jetzt könnt ihr unten in der Leiste die Stelle in Hex ablesen. Bei mir ist es: 5D82Fh (wobei das h für "Hexadezimal" steht). Wenn die Stelle aufgeschrieben ist, Können wir den Hex Editor starten. Die Hexzahlen die dann dort an dieser Stelle stehen müssen dann durch folgende ersetzt werden: B8 01 00 00 00 was so viel bedeutet wie "mov eax, 00000001". Wenn das erledigt ist, dann dürfte das Spiel ohne CD laufen. Ich wünsche dann nur noch viel Spass.




  • Sonstige

    Schon wieder zu Ende, aber wenn es dir gefallen hat, dann mail wir doch einfach. Ich freue mich immer wenn ich eine Mail bekomme, egal ob Kritik oder Probs. Und denkt bitte dran, wenn euch das Spiel gefällt dann klaut es lieber anstatt zu cracken ;) nein nätürlich kaufen. Damit unterstüzt ihr die Spielemacher und sie können dadurch noch mehr und bessere Spiele kreiren, die wir dann auch cracken können :) Also bis dann.

    Grüsse gehen raus an die Kryptocrew, Fireball, ultraschall und an den Rest der TGC Crew

    Dankeschön geht raus an R!SC (für sein Unwrapp Programm) und an Black Check (wegen seinem fetten C-Dilla decryptor Programm)